import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'pages.dart';
import 'names.dart';

/// 路由服务类
/// 
/// 提供方便的路由历史操作方法：
/// - 获取当前路由和上一个路由
/// - 返回上一页或指定页面
/// - 打印路由历史
/// - 清空路由历史
class RouteService extends GetxService {
  /// 单例模式
  static RouteService get to => Get.find<RouteService>();
  
  /// 获取当前路由
  String? get currentRoute => RoutePages.currentRoute;
  
  /// 获取上一个路由
  String? get previousRoute => RoutePages.previousRoute;
  
  /// 获取路由历史
  List<String> get history => RoutePages.history;
  
  /// 获取路由观察者
  NavigatorObserver get observer => RoutePages.observer;
  
  /// 返回上一页
  void goBack() {
    Get.back();
  }
  
  /// 返回到指定页面
  /// 
  /// [routeName] 目标路由名称
  void goBackTo(String routeName) {
    Get.until((route) => route.settings.name == routeName);
  }
  
  /// 返回到首页
  void goBackToHome() {
    if (RoutePages.history.isNotEmpty) {
      Get.offAllNamed(RoutePages.history.first);
    } else {
      Get.offAllNamed(RouteNames.systemMain);
    }
  }
  
  /// 返回到根页面
  void goBackToRoot() {
    Get.offAllNamed(RouteNames.main);
  }
  
  /// 检查是否可以返回
  bool canGoBack() {
    return Get.key.currentState?.canPop() ?? false;
  }
  
  /// 检查当前是否在指定路由
  /// 
  /// [routeName] 路由名称
  bool isCurrentRoute(String routeName) {
    return currentRoute == routeName;
  }
  
  /// 检查上一个路由是否是指定路由
  /// 
  /// [routeName] 路由名称
  bool isPreviousRoute(String routeName) {
    return previousRoute == routeName;
  }
  
  /// 打印路由历史
  void printRouteHistory() {
    debugPrint('=========== 路由历史记录 ===========');
    debugPrint('当前路由历史: ${RoutePages.history}');
    debugPrint('当前路由: ${RoutePages.currentRoute}');
    debugPrint('上一个路由: ${RoutePages.previousRoute}');
    debugPrint('历史记录总数: ${RoutePages.history.length}');
    debugPrint('可以返回: ${canGoBack()}');
    debugPrint('====================================');
  }
  
  /// 获取格式化的路由历史信息
  Map<String, dynamic> getRouteInfo() {
    return {
      'current_route': currentRoute,
      'previous_route': previousRoute,
      'history': [...history],
      'history_count': history.length,
      'can_go_back': canGoBack(),
    };
  }
  
  /// 清空路由历史
  void clearHistory() {
    RoutePages.clearHistory();
    debugPrint('路由历史已清空');
  }
  
  /// 检查路由历史中是否包含指定路由
  /// 
  /// [routeName] 路由名称
  bool containsRoute(String routeName) {
    return RoutePages.history.contains(routeName);
  }
  
  /// 获取指定路由在历史中的位置
  /// 
  /// [routeName] 路由名称
  /// 返回 -1 表示未找到
  int getRouteIndex(String routeName) {
    return RoutePages.history.indexOf(routeName);
  }
  
  /// 获取最近访问的 N 个路由
  /// 
  /// [count] 数量
  List<String> getRecentRoutes(int count) {
    if (count <= 0) return [];
    if (count >= history.length) return [...history];
    
    return history.sublist(history.length - count);
  }
  
  /// 获取格式化的最近路由历史信息（限制显示数量）
  /// 
  /// [displayLimit] 显示限制数量，默认10条
  Map<String, dynamic> getFormattedRouteInfo({int displayLimit = 10}) {
    final recentHistory = getRecentRoutes(displayLimit);
    
    return {
      'current_route': currentRoute,
      'previous_route': previousRoute,
      'recent_history': recentHistory,
      'displayed_count': recentHistory.length,
      'total_count': history.length,
      'can_go_back': canGoBack(),
      'is_truncated': history.length > displayLimit,
    };
  }
  
  /// 打印限制数量的路由历史（调试用）
  /// 
  /// [displayLimit] 显示限制数量，默认10条
  void printFormattedRouteHistory({int displayLimit = 10}) {
    final info = getFormattedRouteInfo(displayLimit: displayLimit);
    
    debugPrint('=========== 路由历史记录 ===========');
    debugPrint('当前路由: ${info['current_route']}');
    debugPrint('上一个路由: ${info['previous_route']}');
    debugPrint('最近${info['displayed_count']}条历史: ${info['recent_history']}');
    debugPrint('总历史记录数: ${info['total_count']}');
    debugPrint('可以返回: ${info['can_go_back']}');
    if (info['is_truncated']) {
      debugPrint('⚠️  历史记录已截断，仅显示最近${displayLimit}条');
    }
    debugPrint('====================================');
  }
}
